package model.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import model.beans.PessoaJB;
import exceptions.DaoException;

public class PessoaDAO extends GenericDAO {

	public PessoaDAO() throws DaoException {
		super();
	}

	public int insert(Connection conn, PessoaJB pessoa) throws DaoException {

		Statement st = null;
		ResultSet rs = null;
		int pkPessoa;

		try {
			st = conn.createStatement();
			rs = st.executeQuery("select nextval('pessoa_i_cod_pessoa_seq') as pkPessoa");

			if (rs.next())
				pkPessoa = rs.getInt("pkPessoa");
			else
				throw new DaoException("Erro ao recuperar o sequence");

			StringBuilder insertPessoa = new StringBuilder();
			insertPessoa.append("insert into pessoa values (" + pkPessoa + ",'"+ pessoa.getNome()+ "',");
			insertPessoa.append("'" + pessoa.getEmail() + "','"+ pessoa.getFone() + "',");
			insertPessoa.append("'" + pessoa.getSenha() + "','"+ pessoa.getLogin() + "',");
			insertPessoa.append("'"	+ pessoa.getCpfCnpj() + "');");
			
			st.executeUpdate(insertPessoa.toString());

			return pkPessoa;
		} catch (Exception e) {
			e.printStackTrace();
			throw new DaoException(e.getMessage());
		} finally {
			try {
				st.close();
				rs.close();
				st = null;
				rs = null;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public void delete(int icod) {

		Connection conn = null;
		Statement st = null;

		try {
			conn = getConnection();
			st = conn.createStatement();

			String sql = "delete from pessoa where i_cod_pessoa = " + icod+ ";";

			st.executeUpdate(sql);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();
				conn = null;
				st = null;

			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public void update(Connection conn, PessoaJB pessoa) {

		Statement st = null;

		try {
			st = conn.createStatement();

			StringBuffer sql = new StringBuffer();
			sql.append("update pessoa set s_nome = '"+pessoa.getNome() + "',");
			sql.append("s_cpfcnpj = '" + pessoa.getCpfCnpj() + "',");
			sql.append("s_login = '" + pessoa.getLogin() + "',");
			sql.append("s_senha = '" + pessoa.getSenha()+ "',");
			sql.append("s_fone = " + pessoa.getFone() + ",");
			sql.append("s_email = '" + pessoa.getEmail()+ "'");
			sql.append("where i_cod_pessoa= " + pessoa.getCodigo() + ";");

			st.executeUpdate(sql.toString());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
				st = null;

		}
	}
	public ArrayList<PessoaJB> selectAll() throws Exception {

		ArrayList<PessoaJB> pessoas = new ArrayList<PessoaJB>();
		PessoaJB pessoa = null;
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			st = conn.createStatement();

			String sql = "select * from pessoa order by s_nome";
			rs = st.executeQuery(sql);

			while (rs.next()) {
				pessoa = new PessoaJB();
				pessoa.setCodigo(rs.getInt("i_codigo"));
				pessoa.setNome(rs.getString("s_nome"));
				pessoa.setFone(rs.getString("s_fone"));

				pessoas.add(pessoa);

			}
			return pessoas;
		} finally {
			try {
				conn.close();
				conn = null;
				st = null;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public PessoaJB findById(int id) throws Exception {

		PessoaJB pessoa = null;
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			st = conn.createStatement();
			
			String sql = "select * from pessoa where i_codigo ="+id+";";
			rs = st.executeQuery(sql);

			if (rs.next()) {
				pessoa = new PessoaJB();
				pessoa.setCodigo(rs.getInt("i_codigo"));
				pessoa.setNome(rs.getString("s_nome"));
				pessoa.setLogin(rs.getString("s_login"));
				pessoa.setSenha(rs.getString("s_senha"));
				pessoa.setCpfCnpj(rs.getString("s_cpfcnpj"));
				pessoa.setFone(rs.getString("s_fone"));
				pessoa.setEmail(rs.getString("s_email"));
			}
			
			return pessoa;
		}

		finally {
			try {
				conn.close();
				conn = null;
				st = null;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public PessoaJB findByNome(String nome) throws Exception {

		PessoaJB pessoa = null;
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			st = conn.createStatement();

			String sql = "select * from pessoa where s_nome ='"+nome+"';";
			rs = st.executeQuery(sql);

			if (rs.next()) {
				pessoa = new PessoaJB();
				pessoa.setCodigo(rs.getInt("i_codigo"));
				pessoa.setNome(rs.getString("s_nome"));
				pessoa.setLogin(rs.getString("s_login"));
				pessoa.setSenha(rs.getString("s_senha"));
				pessoa.setCpfCnpj(rs.getString("s_cpfcnpj"));
				pessoa.setFone(rs.getString("s_fone"));
				pessoa.setEmail(rs.getString("s_email"));
			}

			return pessoa;
		}

		finally {
			try {
				conn.close();
				conn = null;
				st = null;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}